#ifndef TRANSFORM_H
#define TRANSFORM_H
#include "Troll3D_global.h"
#include <GeoTool/vec4.h>
#include <GeoTool/Matrix.h>
#include <GeoTool/Quaternion.h>

class TROLL3DSHARED_EXPORT Transform
{
    public :

        /********************************/
        /*          Members             */
        /********************************/

            /********************************/
            /*          Properties          */
            /********************************/

                vec4        m_Position;         /*!< Vector3 Position                           */
                vec4        m_EulerAngles;      /*!< Store current euler angles values          */
                vec4        m_Forward;          /*!< Forward vector                             */

                Matrix4     m_RotationMatrix;   /*!< Matrix Storing the position in space       */
                Matrix4     m_PositionMatrix;   /*!< Matrix storing the rotation of the object  */

                Matrix4     m_TransformMatrix;  /*!< Matrix storing position then rotation (m_PositionMatrix* m_RotationMatrix) */

            /********************************/
            /*          Methods             */
            /********************************/

                void UpdateTransformMatrix();

                /*! @brief Translate the object, using it's current position as reference   */
                void Translate(float x, float y, float z);

                /*! @brief Translate the object at specified destination                    */
                void Translation(float x, float y, float z);

                /*! @brief Rotate the objet using current rotation                          */
                void RotateEuler(float x, float y, float z);

                /*! @brief Set the Rotation of the object                                   */
                void RotationEuler(float x, float y, float z);

                 /*! @brief Rotate around specified axis                                 */
                void RotateAroundAxis(float x, float y, float z, float teta);

                void Clear();


                Matrix4 ReturnModelMatrix();


            /********************************/
            /*          Constructors        */
            /********************************/

                Transform();

        /********************************/
        /*          Static              */
        /********************************/

            /********************************/
            /*          Properties          */
            /********************************/

            /********************************/
            /*          Methods             */
            /********************************/

};

#endif
